// 引入数据库连接池模块，用于执行数据库查询操作
// const pool = require('../db');
const {db,query} = require('../database/db')

// 定义一个名为checkPermission的高阶函数，用于创建权限检查中间件
// requiredPermission参数表示需要检查的权限代码
const checkPermission = (requiredPermission) => {
  // 返回一个异步中间件函数
  return async (req, res, next) => {
    try {
      // 根据req.user.id查询用户信息
      const [userRows] = await query('SELECT * FROM users WHERE id = ?', [req.user.id]);
      // 如果用户不存在，返回404状态码
      if (userRows.length === 0) {
        return res.status(404).json({ message: 'User not found' });
      }

      // 查询用户所拥有的角色及其对应的权限
      // 通过多表连接查询，获取用户的角色和权限信息
    //   const [roleRows] = await query(`
    //     SELECT Roles.id, Roles.name, Permissions.name as permission_name, Permissions.permission_code
    //     FROM UserRoles
    //     JOIN Roles ON UserRoles.role_id = Roles.id
    //     JOIN RolePermissions ON Roles.id = RolePermissions.role_id
    //     JOIN Permissions ON RolePermissions.permission_id = Permissions.id
    //     WHERE UserRoles.user_id = ?
    //   `, [req.user.id]);
    const roleRows = await query(`
        SELECT roles.id, roles.name, permission.name as name, permission.sign as permission_code
        FROM roles 
        LEFT JOIN permission ON FIND_IN_SET(permission.id, roles.permission_ids) > 0
        LEFT JOIN users ON users.role_id = roles.id
        WHERE users.id = ?
    `, [req.user.id]);
    // console.log("eueihfffffffffffffffw",roleRows)
      // 提取用户所拥有的权限代码
      const userPermissions = roleRows.map(role => role.permission_code);
      // 打印用户所拥有的权限代码，用于调试
      // console.log("userPermissions:::", userPermissions,userPermissions.length);
      // 将用户权限存入res.locals，方便后续使用（注释掉了）
      // res.locals.userPermissions = userPermissions;

      // 检查用户是否拥有所需的权限
      if (userPermissions.includes(requiredPermission)) {
        // 如果用户拥有权限，调用next函数继续执行后续中间件或路由处理函数
        return next();
      } else {
        // 如果用户没有权限，返回400状态码并提示拒绝访问
        return res.status(400).json({ message: '拒绝访问:当前角色暂未有此权限' });
      }
    } catch (error) {
      // 如果发生错误，返回500状态码并提示内部服务器错误
      console.log("检查是否有权限：",error)
      return res.status(400).json({ message: 'Internal server error' });
    }
  };
};

// 导出checkPermission函数，供其他模块使用
module.exports = checkPermission;
